package com.tedu._04mybatis.mapper;

import com.tedu._04mybatis.pojo.WeiBo;
import com.tedu._04mybatis.pojo.WeiBoVO1;
import com.tedu._04mybatis.pojo.WeiBoVO2;
import com.tedu._04mybatis.pojo.WeiBoVO3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiBoMapper {
    int insert(WeiBo weibo);

    int deleteById(Integer id);

    int updateById(WeiBo weiBo);

    /**
     * 以下查询存在的问题是
     * 表中content属性名和WeiBo类中content属性名一致时，可以被直接设置
     * 表中user_id属性名和WeiBo类中userId属性名不一致时，需要给属性名user_id设置别名。
     *
     * 当我们方法定义的返回值为一个具体的对象时，那么查询语句应当只能查询出【一条记录】，
     * 否则会抛出异常，告知结果集出现多条记录
     * org.mybatis.spring.MyBatisSystemException:
     * Expected one result (or null) to be returned by selectOne(), but found: 2
     */
    WeiBo selectById(Integer id);

    //查询全部记录
    List<WeiBo> selectAll();

    //只查询部分字段信息
    WeiBoVO1 selectWeiBoVO1ById(Integer id);

    List<WeiBoVO2> selectWeiBoVO2();

    int dynamicUpdate(WeiBo weiBo);

    int dynamicDelete(Integer[] ids);

    int dynamicDelete2(List<Integer> ids);

    int countWeiBo();

    WeiBoVO3 selectWeiBoVO3ById(Integer id);

    List<WeiBoVO3> selectAllWeiBoVO3();
}
